package cn.iocoder.yudao.module.eval.service.evaluator;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.eval.controller.admin.evaluator.vo.*;
import cn.iocoder.yudao.module.eval.dal.dataobject.evaluator.EvalEvaluatorQualificationDO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.Collection;
import java.util.List;

/**
 * 考评员资质 Service 接口
 *
 * @author 芋道源码
 */
public interface EvalEvaluatorQualificationService {

    /**
     * 创建考评员资质
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createEvaluatorQualification(@Valid EvalEvaluatorQualificationSaveReqVO createReqVO);

    /**
     * 更新考评员资质
     *
     * @param updateReqVO 更新信息
     */
    void updateEvaluatorQualification(@Valid EvalEvaluatorQualificationSaveReqVO updateReqVO);

    /**
     * 删除考评员资质
     *
     * @param id 编号
     */
    void deleteEvaluatorQualification(Long id);

    /**
     * 获得考评员资质
     *
     * @param id 编号
     * @return 考评员资质
     */
    EvalEvaluatorQualificationDO getEvaluatorQualification(Long id);

    /**
     * 获得考评员资质响应VO（包含用户信息）
     *
     * @param id 编号
     * @return 考评员资质响应VO
     */
    EvalEvaluatorQualificationRespVO getEvaluatorQualificationRespVO(Long id);

    /**
     * 获得考评员资质分页
     *
     * @param pageReqVO 分页查询
     * @return 考评员资质分页
     */
    PageResult<EvalEvaluatorQualificationDO> getEvaluatorQualificationPage(EvalEvaluatorQualificationPageReqVO pageReqVO);

    /**
     * 获得考评员资质列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 考评员资质列表
     */
    List<EvalEvaluatorQualificationDO> getEvaluatorQualificationList(EvalEvaluatorQualificationPageReqVO exportReqVO);

    /**
     * 根据用户ID获得考评员资质
     *
     * @param userId 用户ID
     * @return 考评员资质
     */
    EvalEvaluatorQualificationDO getEvaluatorQualificationByUserId(Long userId);

    /**
     * 根据用户ID列表获得考评员资质列表
     *
     * @param userIds 用户ID列表
     * @return 考评员资质列表
     */
    List<EvalEvaluatorQualificationDO> getEvaluatorQualificationListByUserIds(Collection<Long> userIds);

    /**
     * 根据证书编号获得考评员资质
     *
     * @param certificateNumber 证书编号
     * @return 考评员资质
     */
    EvalEvaluatorQualificationDO getEvaluatorQualificationByCertificateNumber(String certificateNumber);

    /**
     * 续期考评员资质
     *
     * @param id 考评员资质ID
     * @param validUntil 新的有效期
     */
    void renewEvaluatorQualification(Long id, String validUntil);

    /**
     * 暂停考评员资质
     *
     * @param id 考评员资质ID
     */
    void suspendEvaluatorQualification(Long id);

    /**
     * 恢复考评员资质
     *
     * @param id 考评员资质ID
     */
    void resumeEvaluatorQualification(Long id);

    /**
     * 启用考评员资质
     *
     * @param id 考评员资质ID
     */
    void enableEvaluatorQualification(Long id);

    /**
     * 禁用考评员资质
     *
     * @param id 考评员资质ID
     */
    void disableEvaluatorQualification(Long id);

    /**
     * 获得考评员资质统计
     *
     * @return 考评员资质统计
     */
    EvalEvaluatorQualificationStatisticsRespVO getEvaluatorQualificationStatistics();

    /**
     * 根据资质状态获得考评员列表
     *
     * @param qualificationStatus 资质状态
     * @return 考评员列表
     */
    List<EvalEvaluatorQualificationRespVO> getEvaluatorListByStatus(Integer qualificationStatus);

    /**
     * 构建考评员资质分页响应，包含用户信息
     *
     * @param pageResult 分页结果
     * @return 包含用户信息的分页响应
     */
    PageResult<EvalEvaluatorQualificationRespVO> buildEvaluatorQualificationRespVOPage(PageResult<EvalEvaluatorQualificationDO> pageResult);

    /**
     * 从用户批量创建考评员资质
     *
     * @param batchCreateReqVO 批量创建请求
     * @return 创建成功的数量
     */
    Integer batchCreateEvaluatorQualificationFromUsers(EvalEvaluatorQualificationBatchCreateFromUsersReqVO batchCreateReqVO);



}